今天要來介紹的是邏輯閘~邏輯閘是電路的基本構建,用於實踐布林邏輯操作,有AND、OR、NOT、XOR、NOR、NAND、XNOR。
AND運算就像是數學運算中的「乘」,只有兩者皆為1時,才會得到1;其餘時間都是為0。
很常會用True table來表示:
in_1 | in_2 | output |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
接著以verilog來寫AND運算:
module newwork(A,B,C);
input A,B;
output C;
assign C = A & B; //AND運算
endmodule
會以「&」來表示執行AND運算。
OR運算就像是數學運算中的「加」,只要有1的出現,輸出即為1,否則為0。
用True table來表示的話:
in_1 | in_2 | output |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
接著用verilog寫OR:
module newwork(A,B,C);
input A,B;
output C;
assign C = A | B; //OR運算
endmodule
會以「|」表示OR運算。
NOT gate就是把0變1、1變0,執行互補(complement)的動作。
以True table來表示:
input | output |
---|---|
0 | 1 |
1 | 0 |
以verilog來寫OR:
module newwork(A,B);
input A;
output B;
assign B = ~A; //NOT運算
endmodule
會以「~」表示NOT運算。
XOR當兩個輸入端的值都相同時,output就為0;如果輸入端值不同,output則為1。
以True table來表示:
in_1 | in_2 | output |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
以verilog來寫的話:
module newwork(A,B,C);
input A,B;
output C;
assign C = A ^ B; //XOR運算
endmodule
會以「^」表示XOR運算。
NOR gate就是OR+NOT,結果與OR gate會相反。
以True table來表示:
OR | NOR |
---|---|
0 | 1 |
1 | 0 |
以verilog來寫的話:
module newwork(A,B,C);
input A,B;
output C;
assign C = ~( A | B ); //NOR運算
endmodule
會在執行OR運算後前方加上「~」表示執行NOR運算。
NAND gate就是AND + NOT,輸出結果與AND相反。
以True table來表示:
AND | NAND |
---|---|
0 | 1 |
1 | 0 |
以verilog來寫的話:
module newwork(A,B,C);
input A,B;
output C;
assign C = ~( A & B );
endmodule
會在執行AND運算後前方加上「~」表示執行NAND運算。
XNOR就是XOR+NOT,結果會與XOR相反。
以True table來表示:
XOR | XNOR |
---|---|
0 | 1 |
1 | 0 |
以verilog來寫的話:
module newwork(A,B,C);
input A,B;
output C;
assign C = ~( A ^ B );
endmodule
會在執行XOR運算後前方加上「~」表示執行XNOR運算。
那七個gate都介紹過了~這裡來做個小整理:
gate | verilog中符號 | 與誰相反 |
---|---|---|
AND | & | NAND |
OR | | | NOR |
XOR | ^ | XNOR |
NOT | ~ | |
NAND | ~(AND) | AND |
NOR | ~(OR) | OR |
XNOR | ~(XOR) | XOR |
今天就先到這邊~